Ci-joint une version modifiée de l'exportation en format CSV des comptes.
Utilisant Ma Tirelire sur mon Palm, je modifie l'export de BP en fonction de mes besoins afin d'y importer mes comptes.
N'hésitez pas à compléter la liste des idées d'évolution...
-- Fabrice
#Version 1.4 Fabrice 25/08/05 - Séparateur Catégories/Sous-Catégories #Version 1.3 Fabrice 22/08/05 - "Chèque" plutôt que "Chq XXXXXX" #Version 1.2 Fabrice 22/08/05 - En-tête optionnel #Version 1.1 Fabrice 19/08/05 - Export tous comptes #Version 1.0 Fabio import BP global categ_names def GetCategName(index, sep, CreateSubCategs): valid_indexes = range(len(categ_names)) if index in valid_indexes: # Ajoute le séparateur de sous-catégorie... if SeparateSubCategs: sep = EditSepCategs CreateSubCategs = 1 # Renvoi la sous-catégorie si pas de séparateur if CreateSubCategs and len(sep) > 0: parent_index = BP.CategParent[index] if parent_index in valid_indexes and parent_index != index: return "%s%s%s" %(categ_names[parent_index], sep, categ_names[index]) else: return "%s%s" %(categ_names[index], sep) else: return categ_names[index] else: if CreateSubCategs: return sep else: return "" def parse(value): lines = value.replace("\r\n", "\n").replace("\r", "\n").split("\n") d = {} for line in lines: i = line.find("=") if i > -1: d[line[:i]] = line[i + 1:] return d def ExportAccount(account, AllAccounts): categs = BP.OperationCateg[account] categs = [GetCategName(index, sep, CreateSubCategs) for index in categs] dates = BP.OperationDate[account] dates = [d.replace("-", "/") for d in dates] people = BP.Operationthirdparty[account] people = [p.replace(sep, " ") for p in people] details = BP.OperationDetails[account] details = [d.replace(sep, " ") for d in details] if ReplaceCheck: # Modes... sans numéro de chèque modes = [] for m in BP.OperationMode[account]: m.replace(sep, " ") if m.find("Chq") == 0: m = "Chèque" modes.append(m) else: # Modes... original modes = BP.OperationMode[account] modes = [m.replace(sep, " ") for m in modes] values = BP.OperationAmount[account] values = [str(v).replace(".", ",") for v in values] lines = zip(dates, modes, people, details, categs, values) records = [] if IncludeHeader: records.append(sep.join(titles)) i = 0 visible_lines = BP.VisibleLines() for line in lines: if AllAccounts: if i in visible_lines: records.append(sep.join(line)) i += 1 else: records.append(sep.join(line)) csv_file = BP.BankPerfectFileName() if csv_file[-3:] == ".bp": csv_file = csv_file[:-3] csv_file = "%s-%s.csv" %(csv_file, BP.AccountName[account]) try: open(csv_file, "w").write("\n".join(records)) BP.MsgBox("Le fichier %s a été créé" %csv_file, 0) except: BP.MsgBox("Impossible de créer le fichier %s" %csv_file, 0) return "" #_______________________________________________________________________________ form = """ checkbox=CheckBoxAllAccounts;Left=20;Top=6;Width=224;Anchors=tl;Caption=Exporter tous les comptes;Checked=0 label=LabelSep;Left=20;Top=32;Width=104;Anchors=tl;Caption=Séparateur à utiliser :; combo=ComboSep;Left=136;Top=28;Width=56;Anchors=tl;Text=\s\\r\\n,\\r\\nTAB\\r\\n;ItemIndex=0 radio=RadioSepSubCategs;Left=20;Top=52;Width=206;Anchors=tl;Caption=Séparateur Catégories/Sous-catégories;Checked=0 edit=EditSepCategs;Left=232;Top=50;Width=20;Anchors=tl;Text=/; radio=RadioCreateSubCategs;Left=20;Top=72;Width=226;Anchors=tl;Caption=Créer une colonne pour les sous-catégories;Checked=1 checkbox=CheckBoxHeader;Left=20;Top=94;Width=224;Anchors=tl;Caption=Inclure l'en-tête;Checked=1 checkbox=CheckBoxCheck;Left=20;Top=114;Width=224;Anchors=tl;Caption=Remplacer "Chq XXXXXX" par "Chèque";Checked=0 button=ButtonCancel;Left=55;Top=150;Width=90;Height=25;Anchors=tl;Caption=Annuler; button=ButtonNext;Left=155;Top=150;Width=90;Height=25;Anchors=tl;Caption=Exporter >>; """ result = parse(BP.CustomForm("Paramètres de l'export", form, 300, 220)) print result if result["SelectedButton"] == "ButtonNext": categ_names = BP.CategName CreateSubCategs = result["RadioCreateSubCategs"] == "1" AllAccounts = result["CheckBoxAllAccounts"] == "1" IncludeHeader = result["CheckBoxHeader"] == "1" ReplaceCheck = result["CheckBoxCheck"] == "1" SeparateSubCategs = result["RadioSepSubCategs"] == "1" EditSepCategs = result["EditSepCategs"] # Si séparateur de catégories, ajoute les sous-catégories if len(EditSepCategs) > 0: ExportSubCategs = 1 if CreateSubCategs: titles = ["Date", "Mode", "Tiers", "Détails", "Catégorie", "Sous-catégorie", "Montant"] else: titles = ["Date", "Mode", "Tiers", "Détails", "Catégorie", "Montant"] seps = [";", ",", "\t"] sep = seps[int(result["ComboSep"])] if AllAccounts: for account in range(len(BP.Accounts())): ExportAccount(account, AllAccounts) else: ExportAccount(BP.AccountCurrent(), AllAccounts)
23/08/05
22/08/05
21/08/05
Pour modifier le fichier .csv plus aisément, je vous conseille CSVed, un superbe éditeur de fichier CSV gratuit sous Windows.
-- Fabrice